package com.vr.cloudpicture.service;

import com.vr.cloudpicture.common.PageResult;
import com.vr.cloudpicture.model.dto.DeleteRequest;
import com.vr.cloudpicture.model.dto.space.SpaceAddRequest;
import com.vr.cloudpicture.model.dto.space.SpaceEditRequest;
import com.vr.cloudpicture.model.dto.space.SpaceQueryRequest;
import com.vr.cloudpicture.model.dto.space.SpaceUpdateRequest;
import com.vr.cloudpicture.model.entity.Space;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vr.cloudpicture.model.vo.SpaceVO;
import com.vr.cloudpicture.model.dto.user.UserLogin;

/**
* @author hzh
* @description 针对表【space(空间)】的数据库操作Service
* @createDate 2025-05-18 20:21:12
*/
public interface ISpaceService extends IService<Space> {

    /**
     * 更新空间
     *
     * @param spaceUpdateRequest 空间更新请求
     * @param loginUser          登录用户
     * @return {@code Boolean }
     */
    Boolean updateSpace(SpaceUpdateRequest spaceUpdateRequest, UserLogin loginUser);

    /**
     * 按空间级别填充空间对象
     *
     * @param space 空间
     */
    void fillSpaceBySpaceLevel(Space space);

    /**
     * 校验空间对象参数
     *
     * @param space 空间对象
     * @param add   是否新增
     */
    void validSpace(Space space, boolean add);

    /**
     * 添加空间
     *
     * @param spaceAddRequest 空间添加请求
     * @param loginUser       登录用户
     * @return {@code Long }
     */
    Long addSpace(SpaceAddRequest spaceAddRequest, UserLogin loginUser);

    /**
     * 检查空间
     *
     * @param space 空间
     */
    void checkSpace(Space space);

    /**
     * 删除空间
     *
     * @param deleteRequest 删除请求
     * @param loginUser     登录用户
     * @return {@code Boolean }
     */
    Boolean deleteSpace(DeleteRequest deleteRequest, UserLogin loginUser);

    /**
     * 编辑空间
     *
     * @param spaceEditRequest 空间编辑请求
     * @param loginUser        登录用户
     * @return {@code Boolean }
     */
    Boolean editSpace(SpaceEditRequest spaceEditRequest, UserLogin loginUser);

    /**
     * 获取空间列表以分页的形式
     *
     * @param spaceQueryRequest 空间查询请求
     * @return {@code PageResult<Space> }
     */
    PageResult<Space> listSpaceByPage(SpaceQueryRequest spaceQueryRequest);

    /**
     * 获取空间列表，封装类分页的形式
     *
     * @param spaceQueryRequest 空间查询请求
     * @param loginUser         登录用户
     * @return {@code PageResult<SpaceVO> }
     */
    PageResult<SpaceVO> listSpaceVOByPage(SpaceQueryRequest spaceQueryRequest, UserLogin loginUser);

    /**
     * 检查空间权限
     *
     * @param space     空间
     * @param loginUser 登录用户
     */
    void checkSpaceAuth(Space space, UserLogin loginUser);
}
